package dxc03;

import dxc02.MyThread;

public class Mythread extends Thread {
    //加上static关键字，表示共享数据
    static int tickets = 0;
    ;//0-99  卖出去1-100
    //锁对象，保证多个线程用同一个锁
    //static Object obj = new Object();

    @Override
    public void run() {
            while (true) {

            //解决方案
                synchronized (Mythread.class) { // 对可能有安全问题的代码加锁,多个线程必须使用同一把锁
                    //t1进来后，就会把这段代码给锁起来
                if (tickets <100) {
                    tickets++;
                    System.out.println(getName() + "卖出第" + tickets + "张票");
                } else {
                    break;
                }
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
            }


        }

    }


}
//发现窗口1卖了第一张票，竟然窗口2也能卖出票，这是为什么？线程安全问题看demo2解决方案
 /*
        卖票出现了问题
相同的票出现了多次
出现了负数的票
问题产生原因
线程执行的随机性导致的,可能在卖票过程中丢失cpu的执行权,导致出现问题

  */